//
//  BaseTableViewController.m
//  Project
//
//  Created by Jason on 15/12/1.
//  Copyright © 2015年 Happy. All rights reserved.
//

#import "BaseTableViewController.h"

@interface BaseTableViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic, assign) UITableViewStyle tableViewStyle; /**< tableView样式 */
@property (nonatomic, assign) BOOL isNoMoreData; /**< 标记是否所有数据加载完成 */
@end

@implementation BaseTableViewController
@synthesize tableView = _tableView;
@synthesize tableViewStyle;
@synthesize loadType = _loadType;
@synthesize currentPage,pageSize;
@synthesize pageDic = _pageDic;
@synthesize isLoadMore;
@synthesize isNoMoreData;

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.
    isNoMoreData = NO;
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}


- (void)setLoadType:(TableViewLoadType)loadType withTableViewStyle:(UITableViewStyle)style{
    
    tableViewStyle = style;
    
    [self.tableView mas_makeConstraints:^(MASConstraintMaker *make) {
        
        make.top.offset (0);
        make.bottom.offset (0);
        make.leading.offset (0);
        make.trailing.offset (0);
        
    }];
    
    if (loadType == TableViewRefresh) {
        
        self.tableView.mj_header = [MJRefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(refreshTableView)];
        
    }else if (loadType == TableViewMore){
        
        self.tableView.mj_footer = [MJRefreshFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTableView)];
        
    }else if (loadType == TableViewAll){
        
        self.tableView.mj_header = [MJRefreshHeader headerWithRefreshingTarget:self refreshingAction:@selector(refreshTableView)];
        
        self.tableView.mj_footer = [MJRefreshFooter footerWithRefreshingTarget:self refreshingAction:@selector(loadMoreTableView)];
    }else{
        
        
    }
}

- (void)refreshTableView{
    
    isLoadMore = NO;
    self.currentPage = 0;
    [self requestList];
}

- (void)loadMoreTableView{
    
    if (isNoMoreData) {
        
        [self.tableView.mj_footer endRefreshingWithNoMoreData];
        
    }else{
        isLoadMore = YES;
        self.currentPage = self.currentPage + 1;
        [self requestList];
    }
}

/**
 *  判断页数信息
 *
 *  @param pageDic 页数信息
 */
- (void)handlePage:(NSDictionary *)pageDic{
    
    self.pageDic = pageDic;
    
    
    if (1/*no more data*/) {
        //提示没有更多数据需要加载了
        isNoMoreData = YES;
        [self.tableView.mj_footer endRefreshingWithNoMoreData];
        
    }else{
        
        isNoMoreData = NO;
    }
    
}
- (void)stopRequestAnimation{
    
    [self.tableView.mj_header endRefreshing];
    [self.tableView.mj_footer endRefreshing];
}

/**
 *  这个方法是用来让具体的子类覆盖的
 */
- (void)requestList{
    
    
}

/**
 *  停止刷新动画，并reload tableview
 */
- (void)reloadTableView{
    
    [self stopRequestAnimation];
    [self.tableView reloadData];
}


/**
 *  请求失败，提示.这里指网络错误的。如果网络正确，而提示性错误，如去缺少xx参数等应该是请求正确性提示
 */
- (void)requestErrorWithMsg:(NSString *)errorMsg{
    
    [super requestErrorWithMsg:errorMsg];
    [self stopRequestAnimation];
}



/**
 *  统一处理请求回来的数据，如果后台返回一致的话是做好的，如果不能一直的话只有在子类中覆盖这个方法
 具体处理....
 *
 *  @param requestData 返回的数据，根据具体情况看这个是字典还是数组
 */
- (void)handleRequestListData:(id)requestData{
    
    [self handlePage:nil];
    
    if (self.isLoadMore) {
        
        [self.dataSource addObjectsFromArray:requestData];
        
    }else{
        
        [self.dataSource removeAllObjects];
        [self.dataSource addObjectsFromArray:requestData];
    }
    
    [self reloadTableView];
}

-(UITableView *)tableView{
    
    if (!_tableView) {
        
        _tableView = [[UITableView alloc] initWithFrame:CGRectZero style:tableViewStyle];
        _tableView.delegate = self;
        _tableView.dataSource = self;
        [self.view addSubview:_tableView];
    }
    
    return _tableView;
}


-(NSMutableDictionary *)pageDic{
    
    if (_pageDic) {
        
        
    }else{
        
        _pageDic = [NSMutableDictionary dictionary].mutableCopy;
    }
    
    return _pageDic;
}
#pragma mark -
#pragma mark UITableViewDataSource
- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView{
    return 1;
}

- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section{
    return 0;
}

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath{
    static NSString* strcell = @"cellIdentifier";
    UITableViewCell* cell = [tableView dequeueReusableCellWithIdentifier:strcell];
    if(!cell){
        cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:strcell];
    }
    return cell;
}

#pragma mark UITableViewDelegate
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
    return 44.0;
}

- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath{
    [tableView deselectRowAtIndexPath:indexPath animated:YES];
}
/*
 #pragma mark - Navigation
 
 // In a storyboard-based application, you will often want to do a little preparation before navigation
 - (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender {
 // Get the new view controller using [segue destinationViewController].
 // Pass the selected object to the new view controller.
 }
 */

@end
